//package nancal.mp.config
//
//
//import nbcp.base.event.RequestInitEvent
//import nbcp.base.extend.AsString
//import nbcp.base.extend.HasValue
//import nbcp.base.extend.readContentString
//import nbcp.base.utils.FileUtil
//import nbcp.base.utils.JarUtil
//import nbcp.mvc.HttpContext
//import nbcp.mvc.sys.*
//import org.springframework.context.annotation.Configuration
//import org.springframework.context.event.EventListener
//import java.io.File
//import java.time.LocalDateTime
//
//@Configuration
//class DevTraceEventListener {
//
//    @EventListener
//    fun devTrace(ev: RequestInitEvent) {
//        var httpRequest = HttpContext.request
//
//        if (!httpRequest.fullUrl.startsWith("/dev-trace")) {
//            return;
//        }
//
//
//        var path = httpRequest.fullUrl;
//        var body = httpRequest.inputStream.readContentString();
//
//        var logFile = File(FileUtil.resolvePath(JarUtil.getStartingJarFile().parent, "dev-trace.log"));
//        var lines = mutableListOf<String>();
//
//        lines.add("### " + LocalDateTime.now().AsString() + " " + httpRequest.ClientIp);
//        lines.add(httpRequest.method + " " + path);
//        lines.addAll(
//            httpRequest.headerNames.toList()
//                .filterNot { it.startsWith("sec-", ignoreCase = true) }
//                .map { it + ": " + httpRequest.getHeader(it) }
//        );
//
//        if (body.HasValue) {
//            lines.add("")
//            lines.add(body);
//        }
//
//        logFile.appendText(lines.joinToString("\n") + "\n");
//
//
//        var retJson = httpRequest.queryJson.get("ret-json").AsString();
//        if (retJson.HasValue) {
//            HttpContext.response.WriteJsonRawValue(retJson);
//            HttpContext.response.status = 200;
//            ev.executeNextChain = false;
//            return;
//        }
//
//
//        HttpContext.response.WriteTextValue(lines.joinToString("\n"))
//        HttpContext.response.status = 200;
//        ev.executeNextChain = false;
//    }
//}